home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 53695 / 53695.xpi / content / tinytweet.js < prev   
Text File  |  2009-12-29  |  9KB  |  254 lines

  1.     window.addEventListener("load", function() { progressListener.init(); }, false);
  2.     var progressListener = {
  3.         init: function() {
  4.             document.getElementById("appcontent").addEventListener("DOMContentLoaded", this.onPageLoad, true);
  5.         }, 
  6.         onPageLoad: function(aEvent) {
  7.             if (aEvent.target.defaultView.window == aEvent.target.defaultView.window.parent) {
  8.                 Chitika.Tweeter.initiate( aEvent.originalTarget ); 
  9.             }
  10.         }
  11.     }
  12.  
  13.     // Initiate Chitika Engine
  14.     if(!window.Chitika){ Chitika = {}; }
  15.     
  16.     // Create Module
  17.     Chitika.Tweeter = {};
  18.     
  19.     // Configuration
  20.     var clickX, clickY;
  21.     var tooltipOffsetX = 20;
  22.     var tooltipOffsetY = 15;
  23.     var minChars = 5;
  24.     var maxChars = 1000;
  25.     var ffExtVer = "1.3";
  26.     var processURL = "http://labs.chitika.com/TinyTweet/tweet.php?ffext=" + ffExtVer + "&q=";
  27.     var lastSelection = "";
  28.     var tinyTweetMouseOver = false;
  29.     var tinyTweetLink = ""; // URL for to-be-clicked link
  30.     var tinyTweetLastLink = "";
  31.     var tinyTweetWindow = null;
  32.     
  33.     /******* Initiate Tweeter *******/
  34.     Chitika.Tweeter.initiate = function (doc) {
  35.     
  36.         (function(loader){
  37.               loader.loadSubScript("chrome://tinytweet/content/jquery-1.3.2.js");
  38.         })(
  39.             Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(
  40.                 Components.interfaces.mozIJSSubScriptLoader
  41.             )
  42.         );
  43.         
  44.         // Setup workspace
  45.         Chitika.Tweeter.setup(doc);
  46.         
  47.         // Register Registers (heh :D)
  48.         jQuery(doc).mousedown(function(e) { Chitika.Tweeter.register(e, doc); });
  49.         
  50.         // Register Processing
  51.         jQuery(doc).mouseup(function(e) { Chitika.Tweeter.process(e,doc); });
  52.         
  53.         // Register Mouse Overs
  54.         jQuery(".tweeterHover", content.document).hover(
  55.             function () { tinyTweetMouseOver = true; }, 
  56.             function () { tinyTweetMouseOver = false; }
  57.         );
  58.         
  59.         // Register Clicking
  60.         jQuery(".tweeterLink", content.document).click(function() {
  61.  
  62.             // Link-Check
  63.             if (tinyTweetLastLink != tinyTweetLink) {
  64.                 tinyTweetLastLink = tinyTweetLink;
  65.                 
  66.                 // Close window if opened
  67.                 if (tinyTweetWindow != null && !tinyTweetWindow.closed) {
  68.                     tinyTweetWindow.close();
  69.                 }
  70.                 
  71.                 // Open new window
  72.                 tinyTweetWindow = window.open(tinyTweetLink, "tinyTweetWindow", "chrome,width=800,height=600,resizable=yes");
  73.                 tinyTweetWindow.focus();
  74.                 
  75.             }
  76.             
  77.             // Hide Link
  78.             //jQuery(".tweeterHover", content.document).fadeOut(1000);
  79.             jQuery(".tweeterHover", content.document).css("display", "none");
  80.         
  81.         });
  82.     }
  83.     
  84.     /******* URL Encode/Decode *******/
  85.     Chitika.Tweeter.urlencode = function (str) {
  86.         return escape(str).replace(/\+/g, '%2B').replace(/%20/g,'+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/\@/g, '%40');
  87.     }
  88.     Chitika.Tweeter.urldecode = function (str) {
  89.         return unescape(str.replace(/\+/g, ' '));
  90.     }
  91.  
  92.     /******* Process Seleted Text *******/
  93.     Chitika.Tweeter.process = function(e, doc){
  94.         
  95.         // Get Selection, convert to string & trim it
  96.         var focusedWindow = document.commandDispatcher.focusedWindow;
  97.         var selection = focusedWindow.getSelection().toString().replace(/^\s+|\s+$/g,"");
  98.     
  99.         // Get selection, convert to string & trim it
  100.         if (lastSelection == selection)    { return; } else { lastSelection = selection; }
  101.         if(selection != "" && selection.length >= minChars && selection.length <= maxChars) {
  102.             var diffX = (clickX + e.pageX) / 2;
  103.             var diffY = (clickY + e.pageY) / 2;
  104.             
  105.             /*
  106.             // Check if clean
  107.             if (selection.indexOf(";") == -1 && selection.indexOf("<") == -1 && 
  108.                 selection.indexOf(">") == -1 && selection.indexOf("(") == -1 &&
  109.                 selection.indexOf(")") == -1 ) {
  110.                 
  111.                 // Complete selection
  112.                 selection = Chitika.Tweeter.completeSelection(selection);
  113.             }
  114.             */
  115.  
  116.             // Set X
  117.             if (diffX > 0) { jQuery(".tweeterHover", content.document).css("left", diffX - tooltipOffsetX);
  118.             } else if (diffX < 0) { jQuery(".tweeterHover", content.document).css("left", diffX + tooltipOffsetX);
  119.             } else { jQuery(".tweeterHover", content.document).css("left", e.pageX + tooltipOffsetX); }
  120.             
  121.             // Set Y
  122.             jQuery(".tweeterHover", content.document).css("top", e.pageY + tooltipOffsetY);
  123.             
  124.             // Generate URL
  125.             tinyTweetLink = processURL + Chitika.Tweeter.urlencode(selection);
  126.             
  127.             // Fade In
  128.             //jQuery(".tweeterHover", content.document).fadeIn("slow");
  129.             jQuery(".tweeterHover", content.document).css("display", "block");
  130.             
  131.         }
  132.  
  133.     }
  134.     
  135.     /******* Complete user-made selection (prev/next chars) *******/
  136.     Chitika.Tweeter.completeSelection = function(str) {
  137.     
  138.         // Find Container
  139.         var container = jQuery('*:contains("'+str+'"):last', content.document);
  140.         if (container.length == 0) return str;
  141.         
  142.         // Capture, convert and trim text.
  143.         container = $(container).html().toString().replace(/^\s+|\s+$/g,"").replace(/\t/g,"");
  144.         var findIndex = container.indexOf(str);
  145.         if (findIndex == -1) return str;
  146.         
  147.         // Config
  148.         maxTries = 15;
  149.         
  150.         // Attempt previous
  151.         var prevTry = true, prevStr = "", prevChar = "", charCount = 0;
  152.         do {
  153.             prevChar = container.substr(findIndex - (charCount += 1), 1)
  154.             //console.debug("Previous: Looping on " + charCount + " -- char = [" + prevChar + "] | prevStr = " + prevStr + " SUm => " + (findIndex - charCount) + " | Index => " + findIndex);
  155.             if (prevChar != " " && prevChar != ">" && charCount <= maxTries && (findIndex - charCount) >= 0) {
  156.                 prevStr = prevChar + prevStr;
  157.             } else { prevTry = false; }
  158.         } while (prevTry);
  159.         
  160.         // Attempt next
  161.         var nextTry = true, nextStr = "", nextChar = "", charCount = -1;
  162.         do {
  163.             nextChar = container.substr(findIndex + str.length + (charCount += 1), 1)
  164.             //console.debug("Next: Looping on " + charCount + " -- char = " + nextChar + " | nextStr = " + nextStr);
  165.             if (nextChar != " " && nextChar != "<" && nextChar != "" && nextChar != "," && charCount <= maxTries) {
  166.                 nextStr += nextChar;
  167.             } else { nextTry = false }
  168.         } while (nextTry);
  169.         
  170.         // Compile and return
  171.         return prevStr + str + nextStr;
  172.     }
  173.     
  174.     /******* Register Initial Click / Fadeout *******/
  175.     Chitika.Tweeter.register = function(e, doc) {
  176.         
  177.         // Record initial click positions
  178.         clickX = e.pageX;
  179.         clickY = e.pageY;
  180.         
  181.         // Fade out
  182.         //jQuery(".tweeterHover", content.document).hide("slow");
  183.         if (tinyTweetMouseOver == false) jQuery(".tweeterHover", content.document).css("display", "none");
  184.     }
  185.     
  186.     /******* Setup Workstation *******/
  187.     Chitika.Tweeter.setup = function(doc){
  188.  
  189.         // Generate Elements
  190.         var tweeterHover = jQuery("<div>")
  191.             .css("z-index","99999")
  192.             .css("width", "114px")
  193.             .css("height", "47px")
  194.             .css("background-image", "url('chrome://tinytweet/content/bg.png')")
  195.             .css("position", "absolute")
  196.             .css("display", "none")
  197.             .addClass("tweeterHover");
  198.         var tweeterBody = jQuery("<div>")
  199.             .css("width", "100px")
  200.             .css("height", "25px")
  201.             .css("margin", "15px 7px 0px 7px");
  202.         var tweeterIcon = jQuery("<div>")
  203.             .css("padding", "4px")
  204.             .css("float", "left");
  205.         var tweeterText = jQuery("<div>")
  206.             .css("padding", "5px 0px 0px 5px")
  207.             .css("float", "left")
  208.             .css("color", "#2276BB")
  209.             .css("cursor", "pointer");
  210.         var tweeterIMG = jQuery("<img>")
  211.             .css("height", "16px")
  212.             .css("width", "16px")
  213.             .css("background-image", "url('chrome://tinytweet/content/icon.png')");
  214.         var tweeterLink = jQuery("<a>")
  215.             .attr("href", "#")
  216.             .text("Tweet this")
  217.             .css("font-size","12px")
  218.             .addClass("tweeterLink");
  219.         
  220.         var tweeterStyle = "";
  221.         tweeterStyle += ".tweeterHover { color:#2276BB !important; font-size: 12px; }";
  222.         tweeterStyle += ".tweeterHover a:link { color:#2276BB !important; text-decoration:none !important; }";
  223.         tweeterStyle += ".tweeterHover a:visited { color:#2276BB !important; text-decoration:none !important; }";
  224.         tweeterStyle += ".tweeterHover a:hover { color:#2276BB !important; text-decoration:underline !important; }";
  225.         tweeterStyle += ".tweeterHover a:active { color:#2276BB !important; text-decoration:none !important; }";
  226.         tweeterStyle += ".tweeterHover { margin: 0; padding: 0; border: 0; font-size: 100%; line-height: 1; list-style: none; }";
  227.         tweeterStyle += ".tweeterHover { font: 12px 'Lucida Grande', Verdana, Verdana, Arial, Helvetica, sans-serif; }";
  228.         
  229.         // Compile set
  230.         tweeterHover.append(tweeterBody);
  231.             tweeterBody.append(tweeterIcon);
  232.                 tweeterIcon.append(tweeterIMG);
  233.             tweeterBody.append(tweeterText);
  234.                 tweeterText.append(tweeterLink);
  235.         
  236.         // Add Style
  237.         jQuery(doc.body).prepend('<style type="text/css">'+tweeterStyle+'</style>');
  238.         
  239.         // Finally, append all to body
  240.         jQuery(doc.body).prepend(tweeterHover);
  241.  
  242.         // Ensure color on link element
  243.         jQuery('.tweeterLink', content.document).css('color', '#2276BB');
  244.         jQuery('.tweeterLink', content.document).hover( function(){
  245.             $(this).css("font-size","12px");
  246.             $(this).css('color', '#2276BB');
  247.         }, function(){
  248.             $(this).css("font-size","12px");
  249.             $(this).css('color', '#2276BB');
  250.         });
  251.  
  252.         
  253.     }
  254.